//
//  CZStatusUserViewModel.swift
//  CZWeibo
//
//  Created by 左凯旭 on 16/8/13.
//  Copyright © 2016年 itcast. All rights reserved.
//

import UIKit

class CZStatusUserViewModel: NSObject {

    //创建一个对象
    var statusModel:CZStatusModel?
    
    //微博等级图片
    var vipImage:UIImage?
    
    //微博认证图片
    var verifiedImage:UIImage?
    // 微博来源
    var sinaSourceStr: String?
    // 转发
    var repostsCountStr: String?
    // 评论
    var commentsCountStr: String?
    // 赞
    var attitudesCountStr: String?
    //微博时间
    var sinaTimeStr: String?{
        return NSDate.getSinaDtae(statusModel?.created_at ?? "").sinaDateDescription
    }
    //原创微博正文富文本
    var originalAttr:NSMutableAttributedString?
    //转发微博正文富文本
    var retweetAttr:NSMutableAttributedString?
    
    init(statusModel:CZStatusModel) {

       super.init()
        
        self.statusModel = statusModel
        
        vipImage = dealMbrankVipImage(statusModel.user?.mbrank ?? 0)
        verifiedImage = dealVerifiedImage(statusModel.user?.verified ?? -1)
        sinaSourceStr = dealSinaSourceStr(statusModel.source ?? "")
        repostsCountStr = getSinaCountStr(statusModel.reposts_count ?? 0, title: "转发")
        commentsCountStr = getSinaCountStr(statusModel.comments_count ?? 0, title: "评论")
        attitudesCountStr = getSinaCountStr(statusModel.attitudes_count ?? 0, title: "赞")
        originalAttr = sinaDealContentAttr(statusModel.text ?? "")
        retweetAttr = sinaDealContentAttr(statusModel.retweeted_status?.text ?? "")
    }
}

extension CZStatusUserViewModel{
    //处理微博内容富文本
    func sinaDealContentAttr(text:String)->NSMutableAttributedString{
        //把当前字符串转成富文本
        let allTextAttr = NSMutableAttributedString(string: text)
        
        //        print(text)
        //正则匹配的规则
        let regex = "\\[[a-zA-Z0-9\\u4e00-\\u9fa5]+\\]"
        /**
         *  正则匹配的规则
         *
         *  @param NSString 正则匹配的规则
         - 匹配的个数
         - 匹配的结果
         - 匹配的范围
         - 匹配是否停止
         *
         *  @return
         */
        
        //创建可变数组
        var matchArray:[CZMatchModel] = [CZMatchModel]()
        
        (text as NSString).enumerateStringsMatchedByRegex(regex) { (count, result, range, _) in
            //            print(result.memory, range.memory)
            //实例化model
            let model = CZMatchModel(string: result.memory as! String, range: range.memory)
            //添加模型到数组中
            matchArray.append(model)
        }
        //倒着遍历数组
        for matchmodel in matchArray.reverse() {
            //判断是否为nil
            guard let emoticonModel = CZEmoticonTools.shareTools.searchEmoticonDefaultEmoticonOrLxhEmoticons(matchmodel.string) else{
                continue
            }
            
            //创建一个文字附件
            let att = NSTextAttachment()
            //设置image
            att.image = UIImage.emoticonsImage(emoticonModel)
            //行高
            let lineHeight = UIFont.systemFontOfSize(15).lineHeight
            //设置bounds
            att.bounds = CGRect(x: 0, y: -4, width: lineHeight, height: lineHeight)
            //创建一个不可变的富文本
            let attr = NSAttributedString(attachment: att)
            //替换
            allTextAttr.replaceCharactersInRange(matchmodel.range, withAttributedString: attr)
        }
        
        
        
        //返回一个替换完成的富文本
        return allTextAttr
        
    }

}
//处理微博时间
//extension CZStatusUserViewModel{
//    
//    /*
//     - 时间格式化
//     - 如果微博时间和当前时间比较
//     -如果是今年
//     - 如果是今天
//     - 如果小于60秒  显示 刚刚
//     - 如果大于等于60 && 小于3600  显示 xx分钟前
//     - 其他   显示  xx小时前
//     - 如果是昨天
//     -  2016年08月14日 20:20:20  显示   昨天 20:20
//     - 其他
//     -  2016年06月14日 20:20:20  显示    06月14日 20:20
//     - 如果不是今年
//     -  2014年06月14日 20:20:20  显示 2014年06月14日 20:20
//     */
//    // 处理微博时间// Mon Aug 15 08:28:22 +0800 2016
//    
//    func dealSinaTimeStr(creatAt:String)->String{
//        
//        //        print(creatAt)
//        
//        //时间格式化
//        let df = NSDateFormatter()
//        
//        //设置格式
//        df.dateFormat = "EEE MMM dd HH:mm:ss z yyyy"
//        
//        //本地化
//        df.locale = NSLocale(localeIdentifier: "en_US")
//        
//        //微博时间
//        let sinaDate = df.dateFromString(creatAt)!
//        //        let sinaDate = sinaDate1.dateByAddingTimeInterval(-3600*24*30)
//        //判断是否是今年
//        let isThisYear = sinaIsThisYear(sinaDate)
//        if isThisYear {
//            //是今年
//            //日历类
//            let calender = NSCalendar.currentCalendar()
//            //判断是否是今天
//            if calender.isDateInToday(sinaDate) {
//                // 当前时间和微博时间 求差
//                let s = Int(NSDate().timeIntervalSinceDate(sinaDate))
//                if s<60 {
//                    return "刚刚"
//                }else if s >= 60 && s < 3600{
//                    return "\(s/60)分钟前"
//                }else{
//                    return "\(s/3600)小时前"
//                }
//            }else if calender.isDateInYesterday(sinaDate){
//                //如果是昨天
//                df.dateFormat = "昨天: HH:mm"
//            }else{
//                //其他
//                df.dateFormat = "MM月dd日 HH:mm"
//            }
//            
//        }else{
//            //不是今年    不是今年2014年06月14日 20:20
//            df.dateFormat = "yyyy年MM月dd日 HH:mm"
//        }
//        return df.stringFromDate(sinaDate)
//    }
//    
//    //判断是不是今年
//    func sinaIsThisYear(sinaDate:NSDate)->Bool{
//        
//        //时间格式化
//        let df = NSDateFormatter()
//        
//        //设置格式
//        df.dateFormat = "yyyy"
//        
//        //本地化
//        df.locale = NSLocale(localeIdentifier: "en_US")
//        
//        //微博时间
//        let sinaDateTime = df.stringFromDate(sinaDate)
//        //当前的时间
//        let currentDateTime = df.stringFromDate(NSDate())
//        
//        return sinaDateTime == currentDateTime
//    }
//    
//
//    
//}




// 处理底部视图 转发 评论 赞
extension CZStatusUserViewModel{
    /*
     - 底部视图的转发 评论 赞  业务逻辑
     - 如果 count <= 0  直接显示 转发 评论 赞
     - 如果 count > 0 && count < 10000  是多少显示多少  示例  8888  8888
     - 如果 count >= 10000   示例 12000   显示  1.2万
     - 如果 count%10000 == 0   示例 20000  显示  2万
     */
    
    func getSinaCountStr(count:Int,title:String)-> String{
        
        if count <= 0 {
            return title
        }else if count>0 && count<10000{
            return "\(count)"
        }else{
            
            let cFloat = CGFloat(count/1000)/10
            var cFloatStr = "\(cFloat)万"
             // 是否包含".0"
            if cFloatStr.containsString(".0") {
                // 字符串替换
                cFloatStr = cFloatStr.stringByReplacingOccurrencesOfString(".0", withString: "")
            }
            return cFloatStr
        }
        
    }
    
    
    
}




//处理微博来源
extension CZStatusUserViewModel{
    
    
    func dealSinaSourceStr(source: String)->String{
        // 判断字符串是否包含"> 特殊字符
        
        if source.containsString("\">") {
             // 获取range
            let startRange = source.rangeOfString("\">")
            let endRange = source.rangeOfString("</")

            // 字符串截取
       let result = source.substringWithRange(startRange!.endIndex..<endRange!.startIndex)
            return "来自\(result)"
        }
        //如果为空字符串
        return "没有值"
        
        
    }
    
    
}




//处理cell中的数据
extension CZStatusUserViewModel{
    
    // 处理微博等级image/// 会员等级 1-6
    
    func dealMbrankVipImage(mbrank:Int)->UIImage?{
        
        if mbrank>0 && mbrank<7 {
            
            return UIImage(named: "common_icon_membership_level\(mbrank)")
        }
        return UIImage(named: "common_icon_membership_expired")
    }
    
    
    // 处理微博用户认证image/// 认证类型 -1：没有认证，1，认证用户，2,3,5: 企业认证，220: 达人
    func dealVerifiedImage(verified:Int)->UIImage?{
        
        switch verified {
        case 1:
            return UIImage(named: "avatar_vip")
        case 2,3,5:
            return UIImage(named: "avatar_enterprise_vip")
        case 220:
            return UIImage(named: "avatar_grassroot")
        default:
            return UIImage(named: "avatar_vgirl")
        }
        
    }

    
}







